Introduction
Our project investigates news headlines about women from many types of news sites in four different countries. Since much of the information we recieve daily about current events and popular culture comes from new sites, it is important to investigate any site-spanning tendencies or biases in the reporting about women. In this project, we examine four aspects of headlines about women: which words are most commonly used, how polarizing they are, and the typical bias of the sites and the average bias of all of a country’s sites. To provide more context and to give some concrete examples, we have included a graphic with a few headlines from the data set. This article is examining how does the representation of women in news headlines differ from the portrayal of other topics in headlines?

Data
For this project, we used data from The Pudding (we describe how they collected the data at the end). The data is composed of multiple datasets with different variables. One dataset contains information on the most common words, their frequency and their theme (crime and violence, empowerment, female stereotypes, people and places, race, ethnicity and identity, and no theme). Another dataset lists the headlines, which site published them, the country of the site, and the bias score for the headline. Other datasets included information on polarity of each site’s headlines about women and about all topics for the past 10 years, the average bias for each site.
The Words Used in Headlines
The Usage Frequency of the Words per Theme
Below is a bar graph that shows the cumulative frequency (how often a word appears accross all the headlines) of words in each theme. Each bar represents a different theme; the blocks within a bar represent the words that fall within each theme. The graph is interactive: you can view the word and its frequency that correspond to each block. This graph clearly shows that the words within the crime and violence theme are used the most frequently. We investigate the usage of specific words in this theme in the next graph.
Crime and Violence Words Displayed by Frequency
This plot reveals how frequently each word, within the theme of crime and violence, is used. ‘Kill’ is the most common word, occuring nearly 8000 times in the dataset.

Top Five Most Frequent Words per Theme
Here, we display the top 5 most frequently occuring words in each theme (in this plot we have included words with ‘no theme’). The word ‘man’ appears almost three times more frequently than the average frequency of all words.

Data by Country
Country Map
Data was taken from news sites from four different countries with varying numbers of news sources used. From the United States of America, 86 new sites were used. From the United Kingdom, 41 news sites were used. From South Africa, 23 news sites were used. From India, 36 news sites were used.

Bias Score by Country
The following column chart displays the mean bias by country along with the maximum bias of a headline published by a site in the country. The minimum bias score is zero for all countries so no visual representation was added. The UK has the highest average bias as well as the highest maximum bias.

The Polarity of Headlines
Polarity over Time
In this graph, we visualize how the polarity of headlines has changed over the past ten years. The polarity scores represent how sensationalized a headline is. Sensational headlines sacrifice accuracy in an attempt to provoke an emotional response from readers. They are designed to generate interest through emotional manipulation. In general, the polarity of news headlines about women is higher than the polarity for other headlines. In the past ten years, polarity has increased, and the gap between the polarity of headlines about women and the polarity of general headlines has widened.

Polarity of News Sites
In the graph below, the difference in the average polarity score between headlines about women and other headlines are shown for each site. The sites are ordered by the largest average polarity of headlines about women. Almost every site’s headlines about women are more polarizing than their headlines about other topics.

Headline Examples
Below we show a few more examples of headlines along with their site, country and bias score. The first table shows a subset of the least biased headlines about women, and the second table show a few of the most biased headlines.
| Headline |
Site |
Country |
Bias |
| 'Lady Bird' buzzes through young sexuality |
iol.co.za |
South Africa |
0 |
| American Woman, Divorced From Saudi Husband, Is Trapped in Saudi Arabia |
msn.com |
India |
0 |
| 'SA poorer without her' SACP reacts to Madikizela Mandela's death |
News24.com |
South Africa |
0 |
| Headline |
Site |
Country |
Bias |
| Girl with severe eczema told her mum she 'didn't want to look at herself in the mirror' she's now a model |
manchestereveningnews.co.uk |
UK |
1.000 |
| A Mother Said Her 9 Year Old Daughter Killed Herself Because She Was Bullied For Being Friends With A White Boy |
buzzfeed.com |
UK |
0.833 |
| Woman reunited with her long lost brother reveals surprise as she discovers she's now her SISTER |
dailyrecord.co.uk |
UK |
0.833 |
LS0tCnRpdGxlOiAiSGVhZGxpbmVzIFdyaXR0ZW4gQWJvdXQgV29tZW4iCmF1dGhvcjoKLSBuYW1lOiAiQXVkcmV5IFNteWN6ZWsiCi0gbmFtZTogIkVsbGVyeSBJc2xhbmQiCmRhdGU6ICI0LzI4LzIwMjIiCm91dHB1dDogCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICBkZl9wcmludDogcGFnZWQKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRSwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQpgYGAKCmBgYHtyIGxpYnJhcmllcywgZWNobz1GQUxTRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlPUZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkgICAgICMgZm9yIGdyYXBoaW5nIGFuZCBkYXRhIGNsZWFuaW5nCmxpYnJhcnkobHVicmlkYXRlKSAgICAgIyBmb3IgZGF0ZSBtYW5pcHVsYXRpb24KbGlicmFyeShnZ3RoZW1lcykgICAgICAjIGZvciBldmVuIG1vcmUgcGxvdHRpbmcgdGhlbWVzCmxpYnJhcnkoZ2dhbmltYXRlKSAgICAgIyBmb3IgYWRkaW5nIGFuaW1hdGlvbiBsYXllcnMgdG8gZ2dwbG90cwpsaWJyYXJ5KFJDb2xvckJyZXdlcikgICMgZm9yIGNvbG9yIHBhbGV0dGVzCmxpYnJhcnkodmlyaWRpcykKbGlicmFyeShwbG90bHkpICAgICAgICAjIGZvciB0aGUgZ2dwbG90bHkoKSAtIGJhc2ljIGludGVyYWN0aXZpdHkKbGlicmFyeShnZ2FuaW1hdGUpICAgICAjIGZvciBhZGRpbmcgYW5pbWF0aW9uIGxheWVycyB0byBnZ3Bsb3RzCmxpYnJhcnkodHJhbnNmb3JtcikgICAgIyBmb3IgInR3ZWVuaW5nIiAoZ2dhbmltYXRlKQpsaWJyYXJ5KGdpZnNraSkgICAgICAgICMgbmVlZCB0aGUgbGlicmFyeSBmb3IgY3JlYXRpbmcgZ2lmcyBidXQgZG9uJ3QgbmVlZCB0byBsb2FkIGVhY2ggdGltZQpsaWJyYXJ5KGd0KQpsaWJyYXJ5KG1hcHMpCmxpYnJhcnkoZ2dtYXApCnRoZW1lX3NldCh0aGVtZV9taW5pbWFsKCkpICMgTXkgZmF2b3JpdGUgZ2dwbG90KCkgdGhlbWUgOikKYGBgCgpgYGB7ciwgZWNobz1GQUxTRSwgIHdhcm5pbmcgPSBGQUxTRSwgcmVzdWx0cz1GQUxTRSwgY29tbWVudD1GQUxTRX0KZnJlcV90aGVtZV93b3JkcyA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3RoZS1wdWRkaW5nL2RhdGEvbWFzdGVyL3dvbWVuLWluLWhlYWRsaW5lcy93b3JkX3RoZW1lc19mcmVxLmNzdiIpCmZyZXFfY291bnRyeV93b3JkcyA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3RoZS1wdWRkaW5nL2RhdGEvbWFzdGVyL3dvbWVuLWluLWhlYWRsaW5lcy93b3JkX2NvdW50cnlfZnJlcS5jc3YiKQpoZWFkbGluZV9zaXRlIDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdGhlLXB1ZGRpbmcvZGF0YS9tYXN0ZXIvd29tZW4taW4taGVhZGxpbmVzL2hlYWRsaW5lc19zaXRlLmNzdiIpCndvcmRfdGhlbWVfcmFuayA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3RoZS1wdWRkaW5nL2RhdGEvbWFzdGVyL3dvbWVuLWluLWhlYWRsaW5lcy93b3JkX3RoZW1lc19yYW5rLmNzdiIpCmhlYWRsaW5lX2V4YW1wbGVzIDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdGhlLXB1ZGRpbmcvZGF0YS9tYXN0ZXIvd29tZW4taW4taGVhZGxpbmVzL2hlYWRsaW5lcy5jc3YiKQpwb2xhcml0eV9zaXRlIDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdGhlLXB1ZGRpbmcvZGF0YS9tYXN0ZXIvd29tZW4taW4taGVhZGxpbmVzL3BvbGFyaXR5X2NvbXBhcmlzb25fc2l0ZV9jb3VudHJ5X3RpbWUuY3N2IikKcG9sYXJpdHlfb3Zlcl90aW1lIDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdGhlLXB1ZGRpbmcvZGF0YS9tYXN0ZXIvd29tZW4taW4taGVhZGxpbmVzL3BvbGFyaXR5X2NvbXBhcmlzb25fY291bnRyeV90aW1lLmNzdiIpCmBgYAoKCmBgYHtyLCBlY2hvID0gRkFMU0V9CnBpdm90X2NvdW50cnlfd29yZCA8LSBmcmVxX2NvdW50cnlfd29yZHMgJT4lIAogIHBpdm90X2xvbmdlcihjb2xzID0gLWNvdW50cnksCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gIndvcmQiLAogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAibnVtYmVyIikgJT4lIAogIGZpbHRlcih3b3JkICE9ICJYIikgJT4lIAogIG5hLm9taXQoKQpgYGAKCiMjIEludHJvZHVjdGlvbgoKIyMjIyBPdXIgcHJvamVjdCBpbnZlc3RpZ2F0ZXMgbmV3cyBoZWFkbGluZXMgYWJvdXQgd29tZW4gZnJvbSBtYW55IHR5cGVzIG9mIG5ld3Mgc2l0ZXMgaW4gZm91ciBkaWZmZXJlbnQgY291bnRyaWVzLiBTaW5jZSBtdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSByZWNpZXZlIGRhaWx5IGFib3V0IGN1cnJlbnQgZXZlbnRzIGFuZCBwb3B1bGFyIGN1bHR1cmUgY29tZXMgZnJvbSBuZXcgc2l0ZXMsIGl0IGlzIGltcG9ydGFudCB0byBpbnZlc3RpZ2F0ZSBhbnkgc2l0ZS1zcGFubmluZyB0ZW5kZW5jaWVzIG9yIGJpYXNlcyBpbiB0aGUgcmVwb3J0aW5nIGFib3V0IHdvbWVuLiBJbiB0aGlzIHByb2plY3QsIHdlIGV4YW1pbmUgZm91ciBhc3BlY3RzIG9mIGhlYWRsaW5lcyBhYm91dCB3b21lbjogd2hpY2ggd29yZHMgYXJlIG1vc3QgY29tbW9ubHkgdXNlZCwgaG93IHBvbGFyaXppbmcgdGhleSBhcmUsIGFuZCB0aGUgdHlwaWNhbCBiaWFzIG9mIHRoZSBzaXRlcyBhbmQgdGhlIGF2ZXJhZ2UgYmlhcyBvZiBhbGwgb2YgYSBjb3VudHJ5J3Mgc2l0ZXMuIFRvIHByb3ZpZGUgbW9yZSBjb250ZXh0IGFuZCB0byBnaXZlIHNvbWUgY29uY3JldGUgZXhhbXBsZXMsIHdlIGhhdmUgaW5jbHVkZWQgYSBncmFwaGljIHdpdGggYSBmZXcgaGVhZGxpbmVzIGZyb20gdGhlIGRhdGEgc2V0LiBUaGlzIGFydGljbGUgaXMgZXhhbWluaW5nIGhvdyBkb2VzIHRoZSByZXByZXNlbnRhdGlvbiBvZiB3b21lbiBpbiBuZXdzIGhlYWRsaW5lcyBkaWZmZXIgZnJvbSB0aGUgcG9ydHJheWFsIG9mIG90aGVyIHRvcGljcyBpbiBoZWFkbGluZXM/IFxuCgohW10oaGVhZGxpbmVzX2dyYXBoaWMuanBnKQoKIyMgRGF0YQoKIyMjIyBGb3IgdGhpcyBwcm9qZWN0LCB3ZSB1c2VkIGRhdGEgZnJvbSBUaGUgUHVkZGluZyAod2UgZGVzY3JpYmUgaG93IHRoZXkgY29sbGVjdGVkIHRoZSBkYXRhIGF0IHRoZSBlbmQpLiBUaGUgZGF0YSBpcyBjb21wb3NlZCBvZiBtdWx0aXBsZSBkYXRhc2V0cyB3aXRoIGRpZmZlcmVudCB2YXJpYWJsZXMuIE9uZSBkYXRhc2V0IGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIHRoZSBtb3N0IGNvbW1vbiB3b3JkcywgdGhlaXIgZnJlcXVlbmN5IGFuZCB0aGVpciB0aGVtZSAoY3JpbWUgYW5kIHZpb2xlbmNlLCBlbXBvd2VybWVudCwgZmVtYWxlIHN0ZXJlb3R5cGVzLCBwZW9wbGUgYW5kIHBsYWNlcywgcmFjZSwgZXRobmljaXR5IGFuZCBpZGVudGl0eSwgYW5kIG5vIHRoZW1lKS4gQW5vdGhlciBkYXRhc2V0IGxpc3RzIHRoZSBoZWFkbGluZXMsIHdoaWNoIHNpdGUgcHVibGlzaGVkIHRoZW0sIHRoZSBjb3VudHJ5IG9mIHRoZSBzaXRlLCBhbmQgdGhlIGJpYXMgc2NvcmUgZm9yIHRoZSBoZWFkbGluZS4gT3RoZXIgZGF0YXNldHMgaW5jbHVkZWQgaW5mb3JtYXRpb24gb24gcG9sYXJpdHkgb2YgZWFjaCBzaXRlJ3MgaGVhZGxpbmVzIGFib3V0IHdvbWVuIGFuZCBhYm91dCBhbGwgdG9waWNzIGZvciB0aGUgcGFzdCAxMCB5ZWFycywgdGhlIGF2ZXJhZ2UgYmlhcyBmb3IgZWFjaCBzaXRlLiAKXG4KCioqKgoKCiMjIFRoZSBXb3JkcyBVc2VkIGluIEhlYWRsaW5lcwpcbgoKCiMjIyBUaGUgVXNhZ2UgRnJlcXVlbmN5IG9mIHRoZSBXb3JkcyBwZXIgVGhlbWUgClxuCgojIyMjIyBCZWxvdyBpcyBhIGJhciBncmFwaCB0aGF0IHNob3dzIHRoZSBjdW11bGF0aXZlIGZyZXF1ZW5jeSAoaG93IG9mdGVuIGEgd29yZCBhcHBlYXJzIGFjY3Jvc3MgYWxsIHRoZSBoZWFkbGluZXMpIG9mIHdvcmRzIGluIGVhY2ggdGhlbWUuIEVhY2ggYmFyIHJlcHJlc2VudHMgYSBkaWZmZXJlbnQgdGhlbWU7IHRoZSBibG9ja3Mgd2l0aGluIGEgYmFyIHJlcHJlc2VudCB0aGUgd29yZHMgdGhhdCBmYWxsIHdpdGhpbiBlYWNoIHRoZW1lLiBUaGUgZ3JhcGggaXMgaW50ZXJhY3RpdmU6IHlvdSBjYW4gdmlldyB0aGUgd29yZCBhbmQgaXRzIGZyZXF1ZW5jeSB0aGF0IGNvcnJlc3BvbmQgdG8gZWFjaCBibG9jay4gVGhpcyBncmFwaCBjbGVhcmx5IHNob3dzIHRoYXQgdGhlIHdvcmRzIHdpdGhpbiB0aGUgY3JpbWUgYW5kIHZpb2xlbmNlIHRoZW1lIGFyZSB1c2VkIHRoZSBtb3N0IGZyZXF1ZW50bHkuIFdlIGludmVzdGlnYXRlIHRoZSB1c2FnZSBvZiBzcGVjaWZpYyB3b3JkcyBpbiB0aGlzIHRoZW1lIGluIHRoZSBuZXh0IGdyYXBoLgpcbgoKCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcud2lkdGg9IDgsIGZpZy5oZWlnaHQ9NiwgZmlnLmFsdD0gIkJhciBHcmFwaCBzaG93aW5nIHRoZSBjdW11bGF0aXZlIGZyZXF1ZW5jeSBvZiB3b3JkcyBzb3J0ZWQgYnkgdGhlbWUuIFRoZSBjcmltZSBhbmQgdmlvbGVuY2UgaGFzIHRoZSBtb3N0IGZyZXF1ZW50IHVzZS4gVGhlIGdyYXBoIGlzIGludGVyYWN0aXZlIGFuZCBhbGxvd3MgdGhlIHVzZXIgdG8gc2VlIHRoZSBudW1iZXIgb2YgdXNlcyBvZiBlYWNoIHdvcmQgaW4gdGhlIHRoZW1lLiJ9CnBpdm90X3dvcmRzIDwtIGZyZXFfdGhlbWVfd29yZHMgJT4lIAogIHBpdm90X2xvbmdlcihjb2xzID0gLXRoZW1lLAogICAgICAgICAgICAgICBuYW1lc190byA9ICJ3b3JkIiwKICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gImZyZXEiKSAlPiUgCiAgbmEub21pdCgpCgp3b3JkX3Bsb3QgPC0gcGl2b3Rfd29yZHMgJT4lCiAgI211dGF0ZSh3b3JkID0gZmN0X2luZnJlcSh3b3JkKSklPiUKICBmaWx0ZXIodGhlbWUgIT0gIk5vIHRoZW1lIikgJT4lIAogIGdncGxvdChhZXMoeCA9IGZjdF9yZW9yZGVyKHRoZW1lLCBkZXNjKGZyZXEpLCBzdW0pLCAKICAgICAgICAgICAgIHkgPSBmcmVxLCAKICAgICAgICAgICAgIGZpbGwgPSBmY3RfcmVvcmRlcih0aGVtZSwgd29yZCksCiAgICAgICAgICAgICB0ZXh0ID0gcGFzdGUoIndvcmQ6Iiwgd29yZCkpKSArCiAgICBnZW9tX2NvbChjb2xvciA9ICJncmF5MjYiLCBzaXplID0gLjEpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoImxpZ2h0c2t5Ymx1ZTIiLCAiY29ybmZsb3dlcmJsdWUiLCAic2xhdGVibHVlMSIsICJtZWRpdW1wdXJwbGUyIiwgIiNjMWEwZmEiKSkgKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgICBsYWJzKHRpdGxlID0gIkN1bXVsYXRpdmUgRnJlcXVlbmN5IG9mIFdvcmRzIERlc2NyaWJpbmcgV29tZW4gaW4gSGVhZGxpbmVzIiwKICAgICAgIHggPSAiIiwKICAgICAgIHkgPSAiRnJlcXVlbmN5IikrCiAgICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKCgpnZ3Bsb3RseSh3b3JkX3Bsb3QsCiAgICAgICAgIHRvb2x0aXAgPSBjKCJ5IiwgInRleHQiKSkKYGBgCgoKIyMjIENyaW1lIGFuZCBWaW9sZW5jZSBXb3JkcyBEaXNwbGF5ZWQgYnkgRnJlcXVlbmN5ClxuCiMjIyMgVGhpcyBwbG90IHJldmVhbHMgaG93IGZyZXF1ZW50bHkgZWFjaCB3b3JkLCB3aXRoaW4gdGhlIHRoZW1lIG9mIGNyaW1lIGFuZCB2aW9sZW5jZSwgaXMgdXNlZC4gJ0tpbGwnIGlzIHRoZSBtb3N0IGNvbW1vbiB3b3JkLCBvY2N1cmluZyBuZWFybHkgODAwMCB0aW1lcyBpbiB0aGUgZGF0YXNldC4gCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgZmlnLndpZHRoPSA2LCBmaWcuYWx0PSAiQSBjb2x1bW4gY2hhcnQgdGhhdCBzaG93cyB0aGUgZnJlcXVlbmN5IG9mIHdvcmRzIGluIHRoZSBjcmltZSBhbmQgdmlvbGVuY2UgdGhlbWUgaW4gZGVzY2VuZGluZyBvcmRlciB3aXRoIGtpbGwgYmVpbmcgdXNlZCB0aGUgbW9zdCBmcmVxdWVudGx5IGFuZCBob3Jyb3IgYmVpbmcgdXNlZCB0aGUgbGVhc3QgZnJlcXVlbnRseS4ifQoKcGl2b3Rfd29yZHMgJT4lIAogIGZpbHRlcih0aGVtZSA9PSAiY3JpbWUgYW5kIHZpb2xlbmNlIikgJT4lIAogIGdncGxvdChhZXMoeSA9IGZjdF9yZW9yZGVyKHdvcmQsIGZyZXEpLCB4ID0gZnJlcSkpICsKICAgIGdlb21fY29sKGZpbGwgPSAibWVkaXVtcHVycGxlMiIpKwogICAgZmFjZXRfd3JhcCh+dGhlbWUsIHNjYWxlcyA9ICJmcmVlX3kiKSArCiAgICBsYWJzKHkgPSBOVUxMLCB4ID0gTlVMTCwgZmlsbCA9IE5VTEwpICsKICAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci55ID0gZWxlbWVudF9ibGFuaygpKSsKICBsYWJzKHRpdGxlID0gIiIsCiAgICAgICBzdWJ0aXRsZSA9ICIiKQpgYGAKCiMjIyBUb3AgRml2ZSBNb3N0IEZyZXF1ZW50IFdvcmRzIHBlciBUaGVtZQojIyMjIEhlcmUsIHdlIGRpc3BsYXkgdGhlIHRvcCA1IG1vc3QgZnJlcXVlbnRseSBvY2N1cmluZyB3b3JkcyBpbiBlYWNoIHRoZW1lIChpbiB0aGlzIHBsb3Qgd2UgaGF2ZSBpbmNsdWRlZCB3b3JkcyB3aXRoICdubyB0aGVtZScpLiBUaGUgd29yZCAnbWFuJyBhcHBlYXJzIGFsbW9zdCB0aHJlZSB0aW1lcyBtb3JlIGZyZXF1ZW50bHkgdGhhbiB0aGUgYXZlcmFnZSBmcmVxdWVuY3kgb2YgYWxsIHdvcmRzLiAgClxuCgpgYGB7ciwgZWNobz1GQUxTRSwgZmlnLmFsdD0gIkEgY29sdW1uIGNoYXJ0IHRoYXQgc2hvd3MgdGhlIHRvcCBmaXZlIHdvcmRzIGZvciBlYWNoIHRoZW1lLiBNYW4sIGZyb20gbm8gdGhlbWUsIGlzIHRoZSB3b3JkIHVzZWQgbW9zdCBmcmVxdWVudGx5LiJ9CndvcmRfdGhlbWVfcmFuayAlPiUgCiAgZmlsdGVyKGByYW5rYCA8IDYpICU+JSAKICBzZWxlY3QoIWBYYCkgJT4lIAogIGdncGxvdChhZXMoeSA9IGZjdF9yZW9yZGVyKHdvcmQsIHRoZW1lKSwgeCA9IGNvdW50KSkgKwogIGdlb21fY29sKGFlcyhmaWxsID0gdGhlbWUpKSsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJsaWdodHNreWJsdWUyIiwgImNvcm5mbG93ZXJibHVlIiwgInNsYXRlYmx1ZTEiLCAibWVkaXVtcHVycGxlMiIsICIjYzFhMGZhIiwgIiNkY2EwZmEiKSkgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSsKICBsYWJzKHRpdGxlID0gIiIsCiAgICAgICB5ID0gIiIsCiAgICAgICB4ID0gIiIpICsKICAgICAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnkgPSBlbGVtZW50X2JsYW5rKCkpCiAgCmBgYAoKKioqIAoKIyMgRGF0YSBieSBDb3VudHJ5ClxuCgojIyMgQ291bnRyeSBNYXAKXG4KCiMjIyMjIERhdGEgd2FzIHRha2VuIGZyb20gbmV3cyBzaXRlcyBmcm9tIGZvdXIgZGlmZmVyZW50IGNvdW50cmllcyB3aXRoIHZhcnlpbmcgbnVtYmVycyBvZiBuZXdzIHNvdXJjZXMgdXNlZC4gRnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCA4NiBuZXcgc2l0ZXMgd2VyZSB1c2VkLiBGcm9tIHRoZSBVbml0ZWQgS2luZ2RvbSwgNDEgbmV3cyBzaXRlcyB3ZXJlIHVzZWQuIEZyb20gU291dGggQWZyaWNhLCAyMyBuZXdzIHNpdGVzIHdlcmUgdXNlZC4gRnJvbSBJbmRpYSwgMzYgbmV3cyBzaXRlcyB3ZXJlIHVzZWQuIApcbgoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgZmlnLmFsdD0gIkEgd29ybGQgbWFwIHRoYXQgaGlnaGxpZ2h0cyB0aGUgZm91ciBjb3VudHJpZXMgdGhhdCBkYXRhIHdhcyB0YWtlbiBmcm9tOyB0aGUgVVNBLCB0aGUgVUssIFNvdXRoIEFmcmljYSwgYW5kIEluZGlhLiJ9CndvcmxkX21hcCA8LSBtYXBfZGF0YSgid29ybGQiKQoKaGVhZGxpbmVfc2l0ZSAlPiUgCiAgZ3JvdXBfYnkoY291bnRyeV9vZl9wdWIpICU+JSAKICBzdW1tYXJpc2UoYmlhc19jb3VudHJ5ID0gbWVhbihiaWFzKSkgJT4lIAogIGdncGxvdCgpICsKICAgIGdlb21fbWFwKGRhdGEgPSB3b3JsZF9tYXAsIG1hcCA9IHdvcmxkX21hcCwKICAgICAgICAgICAgIGFlcyhsb25nLCBsYXQsIG1hcF9pZCA9IHJlZ2lvbiksCiAgICAgICAgICAgICBmaWxsID0gIiNlN2RlZmEiKSsKICAgIGdlb21fbWFwKG1hcCA9IHdvcmxkX21hcCwKICAgICAgICAgICAgYWVzKG1hcF9pZCA9IGBjb3VudHJ5X29mX3B1YmApLAogICAgICAgICAgICBmaWxsID0gIm1lZGl1bXB1cnBsZTIiLAogICAgICAgICAgICBjb2xvciA9ICJtZWRpdW1wdXJwbGUyIikrCiAgICBleHBhbmRfbGltaXRzKHggPSB3b3JsZF9tYXAkbG9uZywgeSA9IHdvcmxkX21hcCRsYXQpICsgCiAgICB0aGVtZV9tYXAoKQpgYGAKCiMjIyBCaWFzIFNjb3JlIGJ5IENvdW50cnkKXG4KIyMjIyMgVGhlIGZvbGxvd2luZyBjb2x1bW4gY2hhcnQgZGlzcGxheXMgdGhlIG1lYW4gYmlhcyBieSBjb3VudHJ5IGFsb25nIHdpdGggdGhlIG1heGltdW0gYmlhcyBvZiBhIGhlYWRsaW5lIHB1Ymxpc2hlZCBieSBhIHNpdGUgaW4gdGhlIGNvdW50cnkuIFRoZSBtaW5pbXVtIGJpYXMgc2NvcmUgaXMgemVybyBmb3IgYWxsIGNvdW50cmllcyBzbyBubyB2aXN1YWwgcmVwcmVzZW50YXRpb24gd2FzIGFkZGVkLiBUaGUgVUsgaGFzIHRoZSBoaWdoZXN0IGF2ZXJhZ2UgYmlhcyBhcyB3ZWxsIGFzIHRoZSBoaWdoZXN0IG1heGltdW0gYmlhcy4KXG4KCmBgYHtyLCBlY2hvPUZBTFNFLCBmaWcuYWx0PSAiQSBjb2x1bW4gY2hhcnQgdGhhdCBzaG93cyB0aGUgYXZlcmFnZSBiaWFzIHNjb3JlIG9mIGhlYWRsaW5lcyBieSBjb3VudHJ5IGFsb25nIHdpdGggdGhlIG1heGltdW0gYmlhcyBzY29yZSBmcm9tIHRoZSBjb3VudHJ5LiJ9CmhlYWRsaW5lX3NpdGUgJT4lCiAgZ3JvdXBfYnkoY291bnRyeV9vZl9wdWIpICU+JQogIHN1bW1hcml6ZShtZWFuX2JpYXMgPSBtZWFuKGJpYXMpLCBtYXhfYmlhcyA9IG1heChiaWFzKSkgJT4lIAogIGdncGxvdCgpKwogIGdlb21fY29sKGFlcyh5ID0gY291bnRyeV9vZl9wdWIsIHggPSBtYXhfYmlhcyksIAogICAgICAgICAgIGZpbGwgPSAiI2U3ZGVmYSIsIHdpZHRoID0gLjc1KSsKICBnZW9tX2NvbChhZXMoeSA9IGNvdW50cnlfb2ZfcHViLCB4ID0gbWVhbl9iaWFzKSwgCiAgICAgICAgICAgd2lkdGggPSAuNSwgZmlsbCA9ICJtZWRpdW1wdXJwbGUyIikrCiAgZ2VvbV90ZXh0KGFlcyh5PSBjb3VudHJ5X29mX3B1YiwgeCA9IG1lYW5fYmlhcywgbGFiZWwgPSByb3VuZChtZWFuX2JpYXMsIDMpKSwKICAgICAgICAgICAgY29sb3IgPSAibWVkaXVtcHVycGxlMiIsCiAgICAgICAgICAgIGhqdXN0ID0gLTAuMiwgc2l6ZSA9IDMsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAxKSkrCiAgZ2VvbV90ZXh0KGFlcyh5PSBjb3VudHJ5X29mX3B1YiwgeCA9IG1heF9iaWFzLCBsYWJlbCA9IHJvdW5kKG1heF9iaWFzLCAzKSksCiAgICAgICAgICAgIGNvbG9yID0gIiNjMWEwZmEiLAogICAgICAgICAgICBoanVzdCA9IC0wLjIsIHNpemUgPSAzLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMSkpKwogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEpKSsKICBsYWJzKHRpdGxlID0gIkF2ZXJhZ2UgYW5kIE1heGltdW0gQmlhcyBTY29yZSBieSBDb3VudHJ5IiwKICAgICAgIHggPSBOVUxMLAogICAgICAgeSA9ICIiKSsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueSA9IGVsZW1lbnRfYmxhbmsoKSkKYGBgCgoqKioKCiMjIFRoZSBQb2xhcml0eSBvZiBIZWFkbGluZXMKXG4KCiMjIyBQb2xhcml0eSBvdmVyIFRpbWUKXG4KIyMjIyMgSW4gdGhpcyBncmFwaCwgd2UgdmlzdWFsaXplIGhvdyB0aGUgcG9sYXJpdHkgb2YgaGVhZGxpbmVzIGhhcyBjaGFuZ2VkIG92ZXIgdGhlIHBhc3QgdGVuIHllYXJzLiBUaGUgcG9sYXJpdHkgc2NvcmVzIHJlcHJlc2VudCBob3cgc2Vuc2F0aW9uYWxpemVkIGEgaGVhZGxpbmUgaXMuIFNlbnNhdGlvbmFsIGhlYWRsaW5lcyBzYWNyaWZpY2UgYWNjdXJhY3kgaW4gYW4gYXR0ZW1wdCB0byBwcm92b2tlIGFuIGVtb3Rpb25hbCByZXNwb25zZSBmcm9tIHJlYWRlcnMuIFRoZXkgYXJlIGRlc2lnbmVkIHRvIGdlbmVyYXRlIGludGVyZXN0IHRocm91Z2ggZW1vdGlvbmFsIG1hbmlwdWxhdGlvbi4gSW4gZ2VuZXJhbCwgdGhlIHBvbGFyaXR5IG9mIG5ld3MgaGVhZGxpbmVzIGFib3V0IHdvbWVuIGlzIGhpZ2hlciB0aGFuIHRoZSBwb2xhcml0eSBmb3Igb3RoZXIgaGVhZGxpbmVzLiBJbiB0aGUgcGFzdCB0ZW4geWVhcnMsIHBvbGFyaXR5IGhhcyBpbmNyZWFzZWQsIGFuZCB0aGUgZ2FwIGJldHdlZW4gdGhlIHBvbGFyaXR5IG9mIGhlYWRsaW5lcyBhYm91dCB3b21lbiBhbmQgdGhlIHBvbGFyaXR5IG9mIGdlbmVyYWwgaGVhZGxpbmVzIGhhcyB3aWRlbmVkLgpcbgoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9CnBvbGFyaXR5X3RpbWVfYW5pbSA8LSBwb2xhcml0eV9vdmVyX3RpbWUgJT4lIAogIGdyb3VwX2J5KGB5ZWFyYCkgJT4lIAogIHN1bW1hcmlzZSh3b21lbl9tZWFuID0gbWVhbihgd29tZW5fcG9sYXJpdHlfbWVhbmApLAogICAgICAgICAgICBhbGxfbWVhbiA9IG1lYW4oYGFsbF9wb2xhcml0eV9tZWFuYCksCiAgICAgICAgICAgIHllYXIpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIGdncGxvdCgpKwogIGdlb21fbGluZShhZXMoeD1geWVhcmAsIHk9YHdvbWVuX21lYW5gKSwgY29sb3IgPSAibWVkaXVtcHVycGxlMiIsIHNlID0gRkFMU0UpKwogIGdlb21fbGluZShhZXMoeD1geWVhcmAsIHk9YGFsbF9tZWFuYCksIGNvbG9yID0gImJsYWNrIiwgc2UgPSBGQUxTRSkrCiAgZ2VvbV9wb2ludChhZXMoeD1geWVhcmAsIHk9YHdvbWVuX21lYW5gKSwKICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmlsbCA9ICIjYzJiMWUzIiwKICAgICAgICAgICAgIHNpemUgPSA1LCBzdHJva2UgPSAyLCBzaGFwZSA9IDIxKSArCiAgZ2VvbV9wb2ludChhZXMoeD1geWVhcmAsIHk9YGFsbF9tZWFuYCksIHNpemUgPSAyLjUpKwogIGdlb21fbGFiZWwobGFiZWwgPSAiSGVhZGxpbmVzIGFib3V0IFxud29tZW4iLCBhZXMoeD1geWVhcmAsIHk9IGB3b21lbl9tZWFuYCksIAogICAgICAgICAgICAgY29sb3IgPSAicHVycGxlNCIsIHBvc2l0aW9uID0gcG9zaXRpb25fbnVkZ2UoeCA9IDAsIHkgPSAwLjAyMykpKwogIGdlb21fbGFiZWwobGFiZWwgPSAiSGVhZGxpbmVzIGFib3V0XG5vdGhlciB0b3BpY3MiLCBhZXMoeD1geWVhcmAsIHk9IGBhbGxfbWVhbmApLAogICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9udWRnZSh4ID0gMCwgeSA9IDAuMDE3MykpKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDIwMTAsIDIwMTIsIDIwMTQsIDIwMTYsIDIwMTgsIDIwMjApKSsKICBsYWJzKHRpdGxlID0gIiIsCiAgICAgICB5ID0gIiIsCiAgICAgICB4ID0gIiIpKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMubGluZS54ID0gZWxlbWVudF9saW5lKGNvbG9yID0gImJsYWNrIikpKwogIHRyYW5zaXRpb25fcmV2ZWFsKHllYXIpCgphbmltX3NhdmUoInBvbGFyaXR5X3RpbWVfYW5pbS5naWYiLAogICAgICAgICAgYW5pbWF0ZShwb2xhcml0eV90aW1lX2FuaW0sIGVuZF9wYXVzZSA9IDEwKSkKYGBgCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZmlnLmFsdD0iQW4gYW5pbWF0ZWQgbGluZSBncmFwaCB0aGF0IHNob3dzIHRoZSBiaWFzIG92ZXIgdGltZSBmb3IgaGVhZGxpbmVzIGFib3V0IHdvbWVuIGFuZCBoZWFkbGluZXMgYWJvdXQgb3RoZXIgdG9waWNzLiBUaGUgYmlhcyBmb3IgaGVhZGxpbmVzIGFib3V0IHdvbWVuIGhhcyBjb25zaXN0ZW50bHkgYmVlbiBoaWdoZXIuIn0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoInBvbGFyaXR5X3RpbWVfYW5pbS5naWYiKQpgYGAKCiMjIyBQb2xhcml0eSBvZiBOZXdzIFNpdGVzClxuCiMjIyMjIEluIHRoZSBncmFwaCBiZWxvdywgdGhlIGRpZmZlcmVuY2UgaW4gdGhlIGF2ZXJhZ2UgcG9sYXJpdHkgc2NvcmUgYmV0d2VlbiBoZWFkbGluZXMgYWJvdXQgd29tZW4gYW5kIG90aGVyIGhlYWRsaW5lcyBhcmUgc2hvd24gZm9yIGVhY2ggc2l0ZS4gVGhlIHNpdGVzIGFyZSBvcmRlcmVkIGJ5IHRoZSBsYXJnZXN0IGF2ZXJhZ2UgcG9sYXJpdHkgb2YgaGVhZGxpbmVzIGFib3V0IHdvbWVuLiBBbG1vc3QgZXZlcnkgc2l0ZSdzIGhlYWRsaW5lcyBhYm91dCB3b21lbiBhcmUgbW9yZSBwb2xhcml6aW5nIHRoYW4gdGhlaXIgaGVhZGxpbmVzIGFib3V0IG90aGVyIHRvcGljcy4gClxuCgpgYGB7ciwgZmlnLmhlaWdodD0gMjQsIGZpZy53aWR0aD0gOCwgZWNobz1GQUxTRSwgZmlnLmFsdD0iQSBjaGFydCB0aGF0IHNob3dzIHRoZSBkaWZmZXJlbmNlIGluIHBvbGFyaXR5IGZvciBhbGwgbmV3cyBzaXRlcyB0aGF0IGRhdGEgd2FzIHRha2VuIGZyb20uIE1vc3Qgb2YgdGhlIHNpdGVzIGhhdmUgYSBoaWdoZXIgcG9sYXJpdHkgaW4gcmVnYXJkcyB0byBoZWFkbGluZXMgYWJvdXQgd29tZW4gY29tcGFyZWQgdG8gaGVhZGxpbmVzIGFib3V0IG90aGVyIHRvcGljcy4gVGhlIGRhaWx5IHN1biBoYXMgYnkgZmFyIHRoZSBsYXJnZXN0IGRpZmZlcmVuY2UgaW4gcG9sYXJpdHkgb2YgaXRzIGhlYWRsaW5lcy4ifQpwb2xhcml0eV9zaXRlICU+JSAKICBnZ3Bsb3QoKSsKICBnZW9tX3NlZ21lbnQoYWVzKHg9cG9sYXJpdHlfYmFzZSwgeGVuZD1wb2xhcml0eV93b21lbiwgeT1mY3RfcmVvcmRlcihzaXRlLCBwb2xhcml0eV93b21lbiksIHllbmQ9c2l0ZSksIHNpemUgPSAxKSsKICBnZW9tX3BvaW50KGFlcyh4PXBvbGFyaXR5X2Jhc2UsIHkgPSBzaXRlKSwgc2l6ZSA9IDIpKwogIGdlb21fcG9pbnQoYWVzKHg9cG9sYXJpdHlfd29tZW4sIHkgPSBzaXRlKSwgY29sb3IgPSAiYmxhY2siLCBmaWxsID0gIiNjMWEwZmEiLCAKICAgICAgICAgICAgIHNpemUgPSAzLCBzdHJva2UgPSAxLCBzaGFwZSA9IDIxKSsKICBsYWJzKHRpdGxlID0gIiIsCiAgICAgICB5ID0gIiIsCiAgICAgICB4ID0gIlBvbGFyaXR5IikrCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSkrCiAgYW5ub3RhdGUoImxhYmVsIiwgeCA9IC4xLCB5ID0gMTc2LCBsYWJlbCA9ICJBdmVyYWdlIFBvbGFyaXR5IG9mIFxuIEhlYWRsaW5lcyBBYm91dCBXb21lbiIsIGNvbG9yID0gIm1lZGl1bXB1cnBsZTIiKSsKICBhbm5vdGF0ZSgibGFiZWwiLCB4ID0gLjEsIHkgPSAxNzIsIGxhYmVsID0gIkF2ZXJhZ2UgUG9sYXJpdHkgb2YgXG4gR2VuZXJhbCBIZWFkbGluZXMiKSsKICBsYWJzKHRpdGxlID0gIkRpZmZlcmVuY2VzIGluIFNpdGUgUG9sYXJpdHk6IEhlYWRsaW5lcyBhYm91dCBXb21lbiB2cyBHZW5lcmFsIEhlYWRsaW5lcyIpCmBgYAoKKioqCgojIyBIZWFkbGluZSBFeGFtcGxlcwpcbgojIyMjIEJlbG93IHdlIHNob3cgYSBmZXcgbW9yZSBleGFtcGxlcyBvZiBoZWFkbGluZXMgYWxvbmcgd2l0aCB0aGVpciBzaXRlLCBjb3VudHJ5IGFuZCBiaWFzIHNjb3JlLiBUaGUgZmlyc3QgdGFibGUgc2hvd3MgYSBzdWJzZXQgb2YgdGhlIGxlYXN0IGJpYXNlZCBoZWFkbGluZXMgYWJvdXQgd29tZW4sIGFuZCB0aGUgc2Vjb25kIHRhYmxlIHNob3cgYSBmZXcgb2YgdGhlIG1vc3QgYmlhc2VkIGhlYWRsaW5lcy4gCmBgYHtyLCBlY2hvPUZBTFNFLCBmaWcuYWx0PSJBIHRhYmxlIHdpdGggdGhyZWUgZXhhbXBsZXMgb2YgaGVhZGxpbmVzIHdpdGggdmVyeSBsb3cgYmlhcyBzY29yZXMuIn0KbGFzdF90aHJlZV9oZWFkbGluZXMgPC0gaGVhZGxpbmVfZXhhbXBsZXMgJT4lIAogIHJlbmFtZSgiSGVhZGxpbmUiID0gYGhlYWRsaW5lX25vX3NpdGVgLAogICAgICAgICAiU2l0ZSIgPSBgc2l0ZWAsCiAgICAgICAgICJDb3VudHJ5IiA9IGBjb3VudHJ5YCwKICAgICAgICAgIkJpYXMiID0gYGJpYXNgKSAlPiUKICBhcnJhbmdlKGBCaWFzYCkgJT4lCiAgZGlzdGluY3QoU2l0ZSwgLmtlZXBfYWxsID0gVFJVRSkgJT4lIAogIHNsaWNlKDE6MykgJT4lIAogIHNlbGVjdChgSGVhZGxpbmVgLCBgU2l0ZWAsIGBDb3VudHJ5YCwgYEJpYXNgKQoKbGFzdF90aHJlZV9oZWFkbGluZXNfdGFibGUgPC0gZ3QobGFzdF90aHJlZV9oZWFkbGluZXMpICU+JSAKICB0YWJfaGVhZGVyKHRpdGxlID0gIkxlYXN0IEJpYXNlZCBIZWFkbGluZSBFeGFtcGxlcyIpICMlPiUgCiAgI3RhYl9zdHlsZShzdHlsZSA9IGNlbGxfdGV4dChjb2xvciA9ICJtZWRpdW1wdXJwbGUyIiksCiAgICAgICAgICAgIyBsb2NhdGlvbnMgPSBjZWxsc19jb2x1bW5fbGFiZWxzKCkpCgpsYXN0X3RocmVlX2hlYWRsaW5lc190YWJsZQpgYGAKClxuClxuCgpgYGB7ciwgZWNobz1GQUxTRSwgZmlnLmFsdD0iQSB0YWJsZSB3aXRoIHRocmVlIGV4YW1wbGVzIG9mIGhpZ2hseSBiaWFzZWQgaGVhZGxpbmVzLiJ9CnRvcF90aHJlZV9oZWFkbGluZXMgPC0gaGVhZGxpbmVfZXhhbXBsZXMgJT4lIAogIHJlbmFtZSgiSGVhZGxpbmUiID0gYGhlYWRsaW5lX25vX3NpdGVgLAogICAgICAgICAiU2l0ZSIgPSBgc2l0ZWAsCiAgICAgICAgICJDb3VudHJ5IiA9IGBjb3VudHJ5YCkgJT4lIAogIGZpbHRlcihTaXRlICE9ICJkYWlseW1haWwuY28udWsiKSAlPiUgCiAgbXV0YXRlKEJpYXMgPSByb3VuZChiaWFzLCBkaWdpdHMgPSAzKSkgJT4lIAogIGFycmFuZ2UoZGVzYyhgQmlhc2ApKSAlPiUKICBkaXN0aW5jdChTaXRlLCAua2VlcF9hbGwgPSBUUlVFKSAlPiUgCiAgc2xpY2UoMTozKSAlPiUgCiAgc2VsZWN0KGBIZWFkbGluZWAsIGBTaXRlYCwgYENvdW50cnlgLCBgQmlhc2ApCgp0b3BfdGhyZWVfaGVhZGxpbmVzX3RhYmxlIDwtIGd0KHRvcF90aHJlZV9oZWFkbGluZXMpICU+JSAKICB0YWJfaGVhZGVyKHRpdGxlID0gIk1vc3QgQmlhc2VkIEhlYWRsaW5lIEV4YW1wbGVzIikgIyU+JSAKICAjdGFiX3N0eWxlKHN0eWxlID0gY2VsbF90ZXh0KGNvbG9yID0gInB1cnBsZTQiKSwKICAgICAgICAgICAgI2xvY2F0aW9ucyA9IGNlbGxzX2JvZHkoKSkKCnRvcF90aHJlZV9oZWFkbGluZXNfdGFibGUKYGBgClxuCioqKgoKIyMgTW9yZSBJbmZvcm1hdGlvbiBBYm91dCB0aGUgRGF0YSAKXG4KIyMjIERhdGEgQ2FsY3VsYXRpb25zClxuCgojIyMjIFBvbGFyaXR5IENhbGN1bGF0aW9uczogVGhlIFB1ZGRpbmcgbWVhc3VyZWQgcG9sYXJpdHkgYnkgdXNpbmcgYSBwYWNrYWdlIGluIHB5dGhvbiB3aGljaCBtZWFzdXJlZCB0aGUgc2VudGltZW50IChuZWdhdGl2ZSB0byBwb3NpdGl2ZSkgb2YgZWFjaCBoZWFkbGluZSAoYSBzY29yZSBmcm9tIC0xIHRvIDEpLiBUaGUgcG9sYXJpdHkgaXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZXNlIHNjb3Jlcy4gCgojIyMjIEJpYXMgQ2FsY3VsYXRpb25zOiBUaGUgUHVkZGluZyBtZWFzdXJlZCBnZW5kZXIgYmlhcyBpbiB0d28gc3RlcHMuIEZpcnN0LCB0aGV5IGNoZWNrZWQgaWYgdGhlIGhlYWRsaW5lIHVzZWQgZ2VuZGVyZWQgbGFuZ3VhZ2UgKCdzaGUnLCAnYnJpZGUnLCAnZGF1Z2h0ZXInLCAuLi4pLiBJZiBpdCBkaWQsIHRoZXkgY291bnRlZCB0aGUgbnVtYmVyIG9mIHdvcmRzIHRoYXQgYXJlIHN0ZXJlb3R5cGVzIGFib3V0IHdvbWVuICgnd2VhaycsICdzZXh5JywgJ2Vtb3Rpb25hbCcsIC4uLikuIFRoZW4sIHRoZXkgbm9ybWFsaXplZCB0aGlzIGNvdW50IHNvIGVhY2ggc2l0ZSBoYWQgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEuIAoKIyMjIERhdGEgU291cmNlXG4KaHR0cHM6Ly9naXRodWIuY29tL3RoZS1wdWRkaW5nL2RhdGEvdHJlZS9tYXN0ZXIvd29tZW4taW4taGVhZGxpbmVzCgoKIyMjIE9yaWdpbmFsIEFydGljbGVcbgpodHRwczovL3B1ZGRpbmcuY29vbC8yMDIyLzAyL3dvbWVuLWluLWhlYWRsaW5lcy8KCgo=